package com.ash.service.book;

import com.ash.domain.Books;
import com.ash.domain.vo.BooksVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Service;
import java.util.List;

/**
 * @author : Chen Chao
 * @encoding : UTF-8
 * @date : 2021/3/23 16:34
 * @file : project06.com.ash.service.book.BookService.java
 * @software : IntelliJ IDEA
 * @since : 1.8
 */
@Service
public interface BookService {
    /**
     *根据书籍类型和书籍名称进行筛选书籍
     * @param bookTypes 书籍类型筛选
     * @param searchName 要模糊查询的书籍名称
     * @return 查询的书籍列表
     */
    List<Books> selectByTypeAndName(@Nullable @Param("bookTypes") List<Integer> bookTypes, @Nullable @Param("searchName") String searchName);
    /**
     * 查询所有书籍
     * @return 返回所有书籍列表
     */
    List<Books> selectAll();
    /**
     * 根据id查询书籍
     * @param bid bid
     * @return 查询的书籍
     */
    Books selectById(Integer bid);
    /**
     * 分页查询所有数据
     * @param bname 查询的书名
     * @param page 页数
     * @param limit 每页数量
     * @return 当前页的书籍列表
     */
    List<BooksVo> selectAll(@Nullable @Param("bname") String bname, @Nullable @Param("page") Integer page, @Nullable @Param("limit") Integer limit);
    /**
     * 分页查询数据的数量
     * @param bname 模糊查询的书名
     * @return 当前页的用户列表
     */
    int dataCount(@Nullable @Param("bname") String bname);
    /**
     * 根据tid进行删除操作
     * @param bid 书籍id
     * @return 受影响行数
     */
    int delete(int bid);
    /**
     * 根据id进行批量删除
     * @param ids 要删除的ids
     */
    int deleteByIds(@Param("ids") List<Integer> ids);
    /**
     * 添加书籍信息
     * @param books 封装书籍信息的对象
     * @return 受影响的行数
     */
    Integer add(Books books);
    /**
     * 选择用户喜欢的书籍
     * @param mid mid
     * @param grade grade
     * @param page page
     * @param limit limit
     * @return 书籍列表
     */
    List<BooksVo> selectLikeAll(@Nullable @Param("mid")Integer mid,
                                @Nullable @Param("grade")Integer grade,
                                @Nullable@Param("page") Integer page,
                                @Nullable@Param("limit") Integer limit);

    /**
     * 查询喜欢书籍的数量
     * @param mid mid
     * @param grade grade
     * @return 受影响的行数
     */
    Integer selectLikeCount(@Nullable @Param("mid")Integer mid,
                            @Nullable @Param("grade")Integer grade);
    /**
     * 查询要审核的书籍
     * @param page 页数
     * @param limit 每页容量
     * @return 书籍列表
     */
    List<BooksVo> selectToCheck(@Param("page") Integer page, @Param("limit") Integer limit);

    /**
     * 查询要审核的书籍列表数量
     * @return  列表数量
     */
    Integer selectToCheckCount();
    /**
     * 根据id进行审核
     * @param bid 书籍的id
     * @return 受影响行数
     */
    int check(@Param("bid") int bid);
    /**
     * 根据id进行批量删除
     * @param ids 要删除的ids
     * @return 受影响行数
     */
    int checkByIds(@Param("ids") List<Integer> ids);
}
